package com.gitee.deeround.javaprotect.tool;

import com.gitee.deeround.javaprotect.tool.util.CommonUtils;
import com.gitee.deeround.javaprotect.tool.util.FileUtils;
import com.gitee.deeround.javaprotect.tool.util.LogUtils;
import com.gitee.deeround.javaprotect.tool.util.StringUtils;

import java.io.File;
import java.util.Map;

/**
 * 参数说明：
 * --from 原始jar包
 * --to 加密后jar包
 * --p 加密密钥(8位)
 * --c 版权信息
 * --inj 包含的jar包条件
 * --inc 包含的类条件
 *
 * @author wanghao 913351190@qq.com
 * @create 2023/11/7 23:30
 */
public class Main {
    public static void main(String[] args) {
        Map<String, String> params = CommonUtils.parse(args);
        if (params == null || params.size() == 0) {
            LogUtils.error("参数不能为空");
            return;
        }
        System.out.println(params);

        String fromParam = params.get("from");
        String toParam = params.get("to");
        String pParam = params.get("p");
        String cParam = params.get("c");
        String injParam = params.get("inj");
        String incParam = params.get("inc");


        if (StringUtils.isEmpty(fromParam)) {
            LogUtils.error("加密前jar包路径不能为空");
            return;
        }
        if (StringUtils.isEmpty(pParam)) {
            LogUtils.error("加密密钥不能为空");
            return;
        }
        if (StringUtils.isEmpty(injParam)) {
            LogUtils.error("包含的jar包条件不能为空");
            return;
        }
        if (StringUtils.isEmpty(incParam)) {
            LogUtils.error("包含的类条件不能为空");
            return;
        }


        //密码和版权
        Context.Instance.setPassword(pParam);
        Context.Instance.setCopyright(cParam);
        //获取加密前jar文件
        File from = new File(fromParam);
        if (!from.exists()) {
            LogUtils.error("加密前jar:" + from.getAbsolutePath() + "不存在");
            return;
        }
        //设置加密后jar路径
        if (StringUtils.isEmpty(toParam)) {
            toParam = new File(from.getParent(), "encrypt-" + FileUtils.getFileName(from.getAbsolutePath())).getAbsolutePath();
        }
        File to = new File(toParam);

        try {
            Encode.run(from.getAbsolutePath(), to.getAbsolutePath(), injParam, incParam);
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }
}
